home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / d86v223.arc / MAIN.DOC < prev    next >
Text File  |  1987-05-04  |  12KB  |  287 lines

  1. ---MAIN.DOC---
  2.  
  3. Invoking the D86 Debugger
  4.  
  5. D86 is the screen-oriented symbolic debugger used with programs 
  6. assembled under the assembler A86.   D86 runs on an MS-DOS 
  7. system, with an IBM-compatible monochrome or color-graphics video 
  8. interface. 
  9.  
  10. You invoke D86 by issuing the command
  11.  
  12.    D86 [-V] [progname [command-tail]]
  13.  
  14. where progname.SYM and progname.COM are the symbols and output 
  15. files of the A86 assembler.  In other words, you simply provide 
  16. the program invocation line, with the word D86 appended to the 
  17. start. 
  18.  
  19. It is not necessary for progname.SYM to be present.  If it is 
  20. not, then the debugger simply comes up with no user symbols 
  21. defined. 
  22.  
  23. You can also invoke D86 with no progname.  The debugger comes up 
  24. with no program loaded, allowing you to simply poke around the 
  25. machine. 
  26.  
  27. If you don't see symbols, or you don't see your program in 
  28. memory, then D86 had some problem loading your files.  The later, 
  29. product-quality version of D86 will tell you this explicitly, but 
  30. right now you simply have to deduce it. 
  31.  
  32. The -V option can be used if you have both a monochrome and a 
  33. color monitor. If you specify -V, the debugger will appear on 
  34. whichever screen is NOT currently selected.  This allows you to 
  35. see both the debugger output and the program output at the same 
  36. time. 
  37.  
  38.  
  39. The D86 Screen Display
  40.  
  41. When D86 starts up, it generates a full-screen display, and 
  42. awaits your debugger commands. 
  43.  
  44. In the top part of the screen is a symbolic disassembly of the 
  45. A86 program, with the screen cursor positioned next to the 
  46. instruction pointed to by the 8086 instruction pointer. 
  47.  
  48. In the lower right corner is a fixed display of the complete 8086 
  49. register set. 
  50.  
  51. At the top of the second column of the register-set display is a 
  52. display of the 8086 flags.  Each flag displays as blank if the 
  53. flags is off; and a lower-case letter if the flag is on: 
  54.           "o" for overflow,
  55.           "d" for direction,
  56.           "i" for interrupts enabled,
  57.           "s" for sign,
  58.           "z" for zero,
  59.           "a" for auxiliary carry,
  60.           "p" for parity even, and
  61.           "c" for carry.
  62.  
  63. Across the bottom line of the screen is a display of the contents 
  64. of the user stack.  The display begins next to the SP register 
  65. value, with the number of elements on the stack.  (The stack is 
  66. assumed to have 0 elements when SP is at its original value, 
  67. 0FFFE). The number of elements is followed by a colon, followed 
  68. by as many of the top stack elements as fits on the line.  The 
  69. initial display will have zero elements; nothing is yet on the 
  70. stack. 
  71.  
  72. To the right of the registers are 6 lines, numbered 1 through 6.  
  73. On these lines, you can generate windows into 8086 memory, 
  74. displaying bytes, words, or ASCII text in a variety of formats. 
  75. The windows can be located either at absolute memory locations, 
  76. or be pointed to by any of the 8086 registers.  The commands you 
  77. issue to generate these windows are described in the next 
  78. section. 
  79.  
  80.  
  81.  
  82. D86 Commands
  83.  
  84. There are 5 kinds of activities you perform in D86:
  85.  
  86.    1. Issuing assembly-language commands for immediate execution 
  87.    2. Issuing debugger commands via lines that begin with a 
  88.       single letter 
  89.    3. Issuing debugger commands via the function and edit keys on 
  90.       your keyboard 
  91.    4. Setting up windows displaying memory
  92.    5. Issuing assembly-language commands to enter into memory 
  93.       (PatchMem) 
  94.  
  95.  
  96.  
  97. Immediate Assembly-Language Commands
  98.  
  99. A primary part of the D86 command language is the A86 assembly 
  100. language. With it, you can jump to different areas of your 
  101. program, set your registers, perform arithmetic, and call any of 
  102. the procedures of your program.  Simply type in any legal A86 
  103. instruction, and it will be executed immediately. 
  104.  
  105. JMP and RET instructions cause the program counter (and thus also 
  106. the disassembly) to move to the indicated destination.  CALL 
  107. instructions cause the entire procedure to be executed. 
  108.  
  109. WARNING: The immediate-execution feature is a little tricky if 
  110.   you are in a multi-segment program, of if you jump to exotic 
  111.   parts of the 86 memory space (i.e., into MSDOS, ROM, video 
  112.   memory, or the interrupts table). This is because D86 needs a 
  113.   buffer in which to put the immediate-execution command.  The 
  114.   buffer should be in your program's CS segment, so that commands 
  115.   such as jumps and near calls execute correctly.  So D86 must 
  116.   always search in CS for a satisfactory buffer.  Here is how 
  117.   D86 finds it: 
  118.  
  119.   1. If you declare a label D86_BUFFER, pointing to a buffer 
  120.      within your program, then D86 will use that buffer as the 
  121.      offset for its immediate instruction. 
  122.  
  123.   2. If not, then if the program's CS register is the same as its 
  124.      SS register, D86 will use (SP-300) as its immediate buffer.  
  125.      Thus, our stack should have plenty of room (a good practice 
  126.      in general). 
  127.  
  128.   3. As a last resort, D86 uses offset 00E0, which points to the 
  129.      last 32 bytes of the Program Segment Prefix (PSP).  In that 
  130.      case, if you were to issue an immediate command that read 
  131.      from a disk file, you would be in trouble, because the disk-
  132.      read operation clobbers the PSP, and the command would then 
  133.      not be trapped back to the debugger. 
  134.  
  135.   In cases 1 and 3 above, the segment containing the buffer is 
  136.   the program's CS segment, unless that is out of range (below 
  137.   the program's original CS, or above the top of available 
  138.   program memory).  If the program CS is out of range, the 
  139.   program's original CS is used instead.  In that case, immediate 
  140.   instructions such JMP, RET, and CALL will not work correctly. 
  141.  
  142.   Note that the above caveats to not apply to single-stepping. 
  143.  
  144.  
  145.  
  146. Entering Instructions Into Memory
  147.  
  148. D86 allows you to alter 8086 memory in two ways: first, you can 
  149. issue immediate assembly language commands which, when executed, 
  150. store values in memory.  The other method is to enter a special 
  151. mode, in which you enter instructions directly into 8086 memory. 
  152.  
  153. You enter this mode by typing the F7 (PatchMem) key. The screen 
  154. cursor jumps from the left edge of the line at the current 
  155. program counter, into the middle of the line where the 
  156. instruction is.  You start typing over the instruction, to signal 
  157. that you are clobbering the instruction that was there.  If you 
  158. did not intend to enter this mode, you can backspace back to the 
  159. start of the instruction, and type a carriage-return. 
  160.  
  161. Each line you type in is checked for errors.  If there was an 
  162. error, a message is displayed, the cursor remains at the same 
  163. location, and you try again. If there was no error, the cursor 
  164. moves beyond the newly-assembled line, and you can type in 
  165. another line. 
  166.  
  167. To exit the memory-programming mode, you type any of the control-
  168. key commands at the beginning of the line.  (Type carriage-return 
  169. if you don't want any actions to be performed.) 
  170.  
  171.  
  172. Entering Data into 8086 Memory
  173.  
  174. You can deposit data into the 8086 memory space by using the 
  175. programming mode described in the above section.  Simply enter DB 
  176. and/or DW statements instead of instructions.  Note that ASCII 
  177. strings can be entered with the DB instruction; and that arrays 
  178. can be initialized via the DUP operator in a DB or DW statement. 
  179.  
  180.  
  181. Adding Symbols to a Program
  182.  
  183. Patch-mode also allows you to do something that you cannot do in 
  184. immediate-execution mode: add symbols to the program.  You can do 
  185. so by either: 
  186.  
  187.    1. Typing in a new symbol-name, followed by a colon; or
  188.    2. Typing in an EQU directive.
  189.  
  190. There are several uses for this.  First, you might want to create 
  191. an abbreviation, by equating a short name to a long one, or to a 
  192. hard-to-remember constant value.  Second, you might want to 
  193. "reverse engineer" a program for which you have a .COM file, but 
  194. not the A86 source code.  Each time you add a label, the 
  195. disassembly becomes more readable.  Third, you might want to 
  196. label code which you have added in patch-mode. 
  197.  
  198. Starting with V2.16, forward referencing is now allowed when you 
  199. are in patch mode.  You must be careful, however, to resolve any 
  200. forward references you have made.  In particular, you will cause 
  201. the assembler to become very confused (and possibly trash random 
  202. memory) if you overwrite a forward reference with some other code 
  203. before you resolve the reference.  So don't! 
  204.  
  205.  
  206. D86 Control-Key Functions
  207.  
  208. D86 has a set of functions invoked by single keys, which can be 
  209. invoked any time D86 is awaiting the beginning of an assembly-
  210. language command. 
  211.  
  212. F1           Single-step the current instruction.  If the 
  213.              instruction is a call, go into the procedure to 
  214.              single-step it.  If you want the entire procedure 
  215.              executed on a single keystroke, use the F2 key. 
  216.  
  217. F2           Procedure-step: start program, trapping at the 
  218.              instruction following the current one.  This is used 
  219.              for executing a procedure call all at once; for 
  220.              breaking out of a loop; and for executing a repeated 
  221.              string operation all at once. 
  222.  
  223. F3           Repeat the last typed-in assembly language or 
  224.              debugger command 
  225.  
  226. F4           Start the program, setting a trap at the destination 
  227.              of the conditional-jump instruction currently 
  228.              pointed to.  If we are not pointing to a conditional 
  229.              jump, then we single-step. 
  230.  
  231. F6           Start the program, setting a trap at the address on 
  232.              top of the stack (hopefully a procedure-return 
  233.              address). 
  234.  
  235. F7           Enter the previously-described Patch Memory mode. 
  236.  
  237. Shift-F7     Mark the current CS:IP memory location, for use by
  238.              a following F debugger line command.  F can either 
  239.              return to this location, or find memory bytes that 
  240.              match the ones at this location.
  241.              
  242. Alt-F9       If you have a Color video board, your debugger 
  243.              display may become corrupted by the program's 
  244.              console output.  If it does, press Alt-F9 to 
  245.              eliminate the corruption.  This key exists only 
  246.              temporarily; on later versions of D86, the 
  247.              corruption will be corrected automatically. 
  248.  
  249. F10          When you are in Help-Mode, this key gives you 
  250.              alternate help windows in some contexts.  When you 
  251.              are not in Help-Mode, this key toggles though the 
  252.              display windows: in this preliminary debugger, that 
  253.              is just the sign-on message, the floating-point 
  254.              display if you have a chip, and a blank window. 
  255.  
  256. Down-arrow   Jump to the instruction following the current one, 
  257.              without executing the current instruction. 
  258.  
  259. Up arrow     "Up": decrement the current program counter.
  260.  
  261. Pg Dn        Jump to the next disassembly page, without executing.
  262.  
  263. Home         Jump to location 0100 in the current code segment.  
  264.              In most .COM programs, this will be the start of the 
  265.              program.  NOTE that no other re-initializations take 
  266.              place with this command.  If you wish to completely 
  267.              reinitialize your program, you should exit and 
  268.              reenter the debugger.
  269.  
  270.  
  271. Alternate Control-Key Assignments For Non-IBM Computers
  272.  
  273. Some of the computers for which D86 is programmed have alternate 
  274. key mappings, to accommodate the differing keyboard layout.
  275.  
  276. The Wang PC toggles help via the HELP key instead of the Alt-F10 
  277. key.
  278.  
  279. The TI-PC toggles help via the F11 key.  It jumps to the next 
  280. disassembly page via Alt-downarrow instead of PgDn.
  281.  
  282. The Sanyo toggles help via CTRL-PF5 instead of Alt-F10.  It 
  283. restores a trashed screen via Ctrl-Shift-PF4 instead of Alt-F9.  
  284. It marks the current CS:IP location via Strl-7 instead of Shift-
  285. F7.
  286.  
  287.